﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LockCrypt.Core {
    /// <summary>
    /// Arguments describing a password.
    /// </summary>
    public class PasswordCreationArgs {
        /// <summary>
        /// Gets or sets whether uppercase characters (A-Z) should be included.
        /// </summary>
        /// <value><c>true</c> if uppercase characters (A-Z) should be included, otherwise <c>false</c>.</value>
        public bool UpperCase { get; set; }
        /// <summary>
        /// Gets or sets whether lowercase characters (a-z) should be included.
        /// </summary>
        /// <value><c>true</c> if lowercase characters (a-z) should be included, otherwise <c>false</c>.</value>
        public bool LowerCase { get; set; }
        /// <summary>
        /// Gets or sets whether digits (0-9) should be included.
        /// </summary>
        /// <value><c>true</c> if digits (0-9) should be included, otherwise <c>false</c>.</value>
        public bool Digits { get; set; }
        /// <summary>
        /// Gets or sets whether brackets ( []{}()&lt;&gt; ) should be included.
        /// </summary>
        /// <value><c>true</c> if brackets ( []{}()&lt;&gt; ) should be included, otherwise <c>false</c>.</value>
        public bool Brackets { get; set; }
        /// <summary>
        /// Gets or sets whether special characters (!"£$%^ etc) should be included.
        /// </summary>
        /// <value><c>true</c> if special characters (!"£$%^ etc) should be included, otherwise <c>false</c>.</value>
        public bool SpecialCharacters { get; set; }
        /// <summary>
        /// Gets or sets whether extended ASCII (code points 161-255) should be included.
        /// </summary>
        /// <value><c>true</c> if extended ASCII (code points 161-255) should be included should be included, otherwise <c>false</c>.</value>
        public bool ExtendedAscii { get; set; }
        /// <summary>
        /// Gets or sets the extra characters to include.
        /// </summary>
        /// <value>The extra characters to include.</value>
        public List<char> ExtraCharacters { get; set; }

        /// <summary>
        /// Gets or sets the password mask.
        /// </summary>
        /// <value>The password mask.</value>
        public string PasswordMask { get; set; }
        public int Length { get; set; }

        /// <summary>
        /// Initializes a new, empty <see cref="PasswordCreationArgs"/>.
        /// </summary>
        public PasswordCreationArgs() {
            ExtraCharacters = new List<char>();
        }
    }
}
